package Emetteurs;

import Informations.*;
import Destinations.*;
import Transmetteurs.*;
import Sources.*;
import Sondes.*;
import Recepteurs.*;
/**
 * 
 */

/**
 * Classe emetteurRZ qui herite de la classe Emetteur
 * @author THIAM, 
 * @author NANOUS
 * @author GUEYE
 * @author NDIAYE
 * @param <R,T>
 *
 */
 public class EmetteurRZ extends Emetteur {

	/**
	 * constructeur
	 * @param nbreEchantillons: le nbre d'echantillon par bit
	 * @param min: la amplitudeeur de l'amplitude min
	 * @param la amplitudeeur de l'amplitude max
	 */
	public EmetteurRZ(int nbreEchantillons,float min,float max) {
		// TODO Auto-generated constructor stub
		super(nbreEchantillons,min,max);
		informationEmise=new Information<Float>();
	}
	
	
	/**
	    * Cette methode va recevoir les informations emises par la source
	    * @param information : l'information que le transmetteur reeoit en entree
	    * @throws InformationNonConforme : Lorsque l'objet information vaut null
	    */
	public void recevoir(Information<Boolean> information)throws InformationNonConforme {
		if(information==null) throw new InformationNonConforme();
		
		this.informationRecue=information;
		this.emettre();
	}
	
		/**
	    * Cette methode va emetre les informations recues
	    */
	public void emettre() throws InformationNonConforme{
		
		
		float amplitude;
		// On decoupe chaque echantillon en 3 parties
		int tiers=(nbreEchantillons/3);
		
		Float [] inf = new Float[informationRecue.nbElements()*nbreEchantillons];
		for (int i=0;i<informationRecue.nbElements();i++){
			if(informationRecue.iemeElement(i))
				amplitude = max;
			else
				amplitude = -max;

			for (int j=0 ; j < this.nbreEchantillons ; j++){
				if (j < tiers){
					
					informationEmise.add(0.0f);
					
				}else if (j >= tiers && j < 2*tiers){
					
					informationEmise.add(amplitude);
				}else{
					
					informationEmise.add(0.0f);
				}
				
			}	
		}

		
		for (DestinationInterface <Float> destination : destinationsConnectees) {
			destination.recevoir(informationEmise);	
			}
		
		
	}

	
	
		

}
